package done.normal_201_300;

import com.study.common.TreeNode;
import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 230. Kth Smallest Element in a BST 二叉搜索树中第K小的元素
 * <p>
 * 给定一个二叉搜索树，编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
 * <p>
 * 说明：
 * 你可以假设 k 总是有效的，1 ≤ k ≤ 二叉搜索树元素个数。
 * <p>
 * 示例 1:
 * 输入: root = [3,1,4,null,2], k = 1
 * 3
 * / \
 * 1   4
 * \
 * 2
 * 输出: 1
 * <p>
 * 示例 2:
 * 输入: root = [5,3,6,2,4,null,null,1], k = 3
 * 5
 * / \
 * 3   6
 * / \
 * 2   4
 * /
 * 1
 * 输出: 3
 * <p>
 * 答案：
 * 中序遍历, 左 -> 中 -> 右。 第k小的数字，就是第k个元素。
 * <p>
 * 2019-05-25 19:14
 **/
@SuppressWarnings("all")
public class KthSmallestElementInABST {

    int cur = 1;
    int res = 0;

    public int kthSmallest(TreeNode root, int k) {
        // first 190525
        return -1;
    }


    @Test
    public void test() {
        info(kthSmallest(new TreeNode(5,
                new TreeNode(3, new TreeNode(
                        2,
                        1), 4), 6), 3));
    }
}



































/*
// 中序遍历
public int kthSmallest(TreeNode root, int k) {
    midOrder(root, k);
    return res;
}

private int cur = 1;
private int res;

private void midOrder(TreeNode root, int k) {
    if (root == null)
        return;

    midOrder(root.left, k);

    // 相当于设置了一个返回的标记，
    // 表示已经找到第k小的值了，不用继续向下寻找了。
    if (cur > k)
        return;

    if (cur++ == k) {
        res = root.val;
        return;
    }

    midOrder(root.right, k);
}
*/
